home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / etc / wlan / shared next >
Text File  |  2006-03-31  |  17KB  |  733 lines

  1. #!/bin/bash
  2. # etc/wlan/shared
  3. #
  4. # Copyright (C) 2002 AbsoluteValue Systems, Inc.  All Rights Reserved.
  5. # --------------------------------------------------------------------
  6. #
  7. # linux-wlan
  8. #
  9. #   The contents of this file are subject to the Mozilla Public
  10. #   License Version 1.1 (the "License"); you may not use this file
  11. #   except in compliance with the License. You may obtain a copy of
  12. #   the License at http://www.mozilla.org/MPL/
  13. #
  14. #   Software distributed under the License is distributed on an "AS
  15. #   IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  16. #   implied. See the License for the specific language governing
  17. #   rights and limitations under the License.
  18. #
  19. #   Alternatively, the contents of this file may be used under the
  20. #   terms of the GNU Public License version 2 (the "GPL"), in which
  21. #   case the provisions of the GPL are applicable instead of the
  22. #   above.  If you wish to allow the use of your version of this file
  23. #   only under the terms of the GPL and not to allow others to use
  24. #   your version of this file under the MPL, indicate your decision
  25. #   by deleting the provisions above and replace them with the notice
  26. #   and other provisions required by the GPL.  If you do not delete
  27. #   the provisions above, a recipient may use your version of this
  28. #   file under either the MPL or the GPL.
  29. #
  30. # --------------------------------------------------------------------
  31. #
  32. # Inquiries regarding the linux-wlan Open Source project can be
  33. # made directly to:
  34. #
  35. # AbsoluteValue Systems Inc.
  36. # info@linux-wlan.com
  37. # http://www.linux-wlan.com
  38. #
  39. # --------------------------------------------------------------------
  40. #
  41. # Portions of the development of this software were funded by 
  42. # Intersil Corporation as part of PRISM(R) chipset product development.
  43. #
  44. # --------------------------------------------------------------------
  45.  
  46. TMPDIR=/tmp
  47.  
  48. if [ ! -n "$ECHO" ]; then
  49.     ECHO=echo
  50. fi
  51.  
  52. if [ -x /sbin/modprobe ] ; then
  53.     MODPROBE=/sbin/modprobe
  54. else
  55.     ${ECHO} "/sbin/modprobe not found."
  56.     exit 1
  57. fi
  58.  
  59. if [ -x /sbin/wlanctl-ng ] ; then 
  60.     WLANCTL=/sbin/wlanctl-ng
  61. else
  62.     ${ECHO} "/sbin/wlanctl-ng not found."
  63.     exit 1
  64. fi
  65.  
  66. if [ -x /sbin/wland ] ; then
  67.     WLAND=/sbin/wland
  68. else
  69.     ${ECHO} "/sbin/wland not found."
  70.     exit 1
  71. fi
  72.  
  73. if [ -f /proc/sys/kernel/hotplug -a \
  74.     -x `cat /proc/sys/kernel/hotplug` -a \
  75.     -f /etc/hotplug/wlan.agent ] ; then
  76.     HAS_HOTPLUG=y
  77. else
  78.     HAS_HOTPLUG=n
  79. fi
  80.  
  81. # Source the wlan configuration
  82. if [ -f /etc/conf.d/wlan.conf ] ; then
  83.     . /etc/conf.d/wlan.conf
  84. else
  85.     ${ECHO} "/etc/conf.d/wlan.conf not found."
  86.     exit 0
  87. fi
  88.  
  89. # Source NSD specific functions
  90. # nsd_fwload
  91. # nsd_mibset
  92. for i in /etc/wlan/shared.* ; do 
  93.     . $i
  94. done
  95.  
  96. is_true ()
  97. {
  98.     # $1 == string containing a t/f indicator.
  99.  
  100.     [ "$1" = "y" -o "$1" = "Y" -o "$1" = "yes" -o "$1" = "YES" \
  101.       -o "$1" = "t" -o "$1" = "T" -o "$1" = "true" -o "$1" = "TRUE" ]
  102. }
  103.  
  104. wlan_nsdname ()
  105. {
  106.     # $1 == wlandev
  107.     # Writes the given device's name to stdout
  108.     grep 'nsd name' /proc/net/p80211/$1/wlandev | sed -e 's/.*: \(.*\)_.*/\1/'
  109. }
  110.  
  111. wlan_enable ()
  112. {
  113.     # $1 == wlandev
  114.  
  115.     #=======ENABLE IFSTATE=============================
  116.     # Bring the device into its operable state
  117.  
  118.     $MODPROBE $1
  119.     
  120.     # First, make sure the driver is loaded....
  121.     if ! ifconfig $1 > /dev/null 2>&1 ; then
  122.         ${ECHO} "Error: Device $1 does not seem to be present."
  123.         ${ECHO} "Make sure you've inserted the appropriate"
  124.         ${ECHO} "modules or that your modules.conf file contains"
  125.         ${ECHO} "the appropriate aliase(s)."
  126.         return 1
  127.     fi
  128.  
  129.     # Call the nsd script's fwload function, in case the card needs
  130.     # a firmware load, or could use an optional one.
  131.  
  132.     nsdname=`wlan_nsdname $1`
  133.     if ! ${nsdname}_fwload $1 ; then
  134.         ${ECHO} "Firmware failed to load for device $1"
  135.         return 1
  136.     fi
  137.  
  138.     # Enable the interface
  139.     result=`$WLANCTL $1 lnxreq_ifstate ifstate=enable`
  140.     if [ $? = 0 ] ; then
  141.         eval $result
  142.         if [ $resultcode != "success" ]; then
  143.             ${ECHO} "Failed to enable the device, resultcode=" \
  144.                 $resultcode "."
  145.             return 1
  146.         fi
  147.     else
  148.         ${ECHO} "Failed to enable the device, exitcode=" $? "."
  149.         return 1
  150.     fi
  151.  
  152.     # Set any NSD specific MIBs
  153.     ${nsdname}_mibset $1
  154. }
  155.  
  156. wlan_user_mibs ()
  157. {
  158.     # $1 == wlandev
  159.  
  160.     #=======USER MIB SETTINGS=============================
  161.     # Set the user specified MIB items.
  162.     for i in $USER_MIBS ; do
  163.         result=`$WLANCTL $1 dot11req_mibset "mibattribute=$i"`
  164.         if [ $? = 0 ] ; then
  165.             eval $result
  166.             if [ $resultcode != "success" ] ; then 
  167.                 ${ECHO} "Failed to set user MIB $i."
  168.                 return 1
  169.             fi
  170.         else
  171.             ${ECHO} "Failed to set user MIB $i."
  172.             return 1
  173.         fi
  174.     done
  175. }
  176.  
  177. wlan_source_config ()
  178. {
  179.     # $1 == wlandev
  180.  
  181.     # XXX what about stray singlequotes.
  182.     eval 'GOSSID="$SSID_'$1'"'
  183.     wlan_source_config_for_ssid "$GOSSID"
  184. }
  185.  
  186. wlan_source_config_for_ssid ()
  187. {
  188.     # $1 == ssid[:bssid]
  189.         # $2 == bssid (optional)
  190.  
  191.         DesiredSSID="$1"
  192.         DesiredBSSID="$2"
  193.  
  194.         if [ -n "$2" ] ; then
  195.                token_ssid=`echo $1 | sed -ne 's/\(.*\)\(:..:..:..:..:..:..\).*/\1/p'`
  196.                token_bssid=`echo $1 | sed -ne 's/\(.*\):\(..:..:..:..:..:..\).*/\2/p'`
  197.            if [ -n "$token_ssid" ] ; then
  198.            DesiredSSID="$token_ssid"
  199.            DesiredBSSID="$token_bssid"
  200.            fi
  201.  
  202.     fi
  203.  
  204.     if [ -f "/etc/conf.d/wlancfg-$DesiredSSID:$DesiredBSSID" ] ; then
  205.         . "/etc/conf.d/wlancfg-$DesiredSSID:$DesiredBSSID"
  206.     elif [ -f "/etc/conf.d/wlancfg-$DesiredSSID" ] ; then
  207.         . "/etc/conf.d/wlancfg-$DesiredSSID"
  208.     else 
  209.  
  210.         if [ -n "$1" ] ; then
  211.             ${ECHO} "Failed to open network config file /etc/conf.d/wlancfg-$1, using default."
  212.         fi
  213.  
  214.         . "/etc/conf.d/wlancfg-DEFAULT"
  215.     fi
  216. }
  217.  
  218. wlan_disable ()
  219. {
  220.     # $1 == wlandev
  221.  
  222.     $WLANCTL $1 lnxreq_ifstate ifstate=disable
  223. }    
  224.  
  225. wlan_ssid_in_list ()
  226. {
  227.     # $1 == wlandev, $2 == ssid,  $3 == bssid
  228.  
  229.       eval 'GOSSID="$SSID_'$1'"'
  230.       
  231.     # This "eval" hackery is to allow escapes in GOSSID...
  232.     cmd="for token in $GOSSID ; do
  233.         ssid_token=\`echo \"\$token\" | sed -ne 's/\(.*\)\(:..:..:..:..:..:..\).*/\1/p'\`
  234.         bssid_token=\`echo \"\$token\" | sed -ne 's/\(.*\):\(..:..:..:..:..:..\).*/\2/p'\`
  235.   
  236.         if [ -z \"\$ssid_token\" ] ; then
  237.             ssid_token="\$token"
  238.           fi
  239.   
  240.         if [ -n \"\$bssid_token\" ] ; then
  241.             if [ \"\$bssid_token\" = \"\$3\" ] ; then
  242.                   return 0
  243.               fi
  244.         elif [ \"\$2\" = \"\$ssid_token\" ] ; then
  245.               return 0    
  246.           fi
  247.     done"
  248.     eval "$cmd"
  249.  
  250.     return 1
  251. }
  252.  
  253. wlan_supports_scan ()
  254. {
  255.     # $1 == wlandev
  256.  
  257.     if is_true "$WLAN_SCAN" ; then
  258.         cat /proc/net/p80211/$1/wlandev | grep 'scan' > /dev/null
  259.         if [ $? = 0 ] ; then
  260.             return 0
  261.         fi
  262.     fi
  263.     return 1
  264. }
  265.  
  266. wlan_scan ()
  267. {
  268.     # $1 == wlandev
  269.  
  270.     # find our allowed SSID list.
  271.     
  272.     # XXX what about stray singlequotes.
  273.     eval 'GOSSID="$SSID_'$1'"'
  274.  
  275.     # kick off a quick scan with the broadcast SSID.
  276.     wlan_scan_one $1 '' '' n
  277.     if [ $? = 0  -a \
  278.         "$GOSSID" = "" ] ; then
  279.         # if successful and our ssid list is null, return.
  280.         sleep 1
  281.         return 0
  282.     fi    
  283.  
  284.     # otherwise we walk through the list, and scan for eacn in turn.
  285.     # this "eval" hackery is to allow escapes in GOSSID
  286.     cmd="for token in $GOSSID ; do
  287.         ssid_token=\`echo \"\$token\" | sed -ne 's/\(.*\)\(:..:..:..:..:..:..\).*/\1/p'\`
  288.         bssid_token=\`echo \"\$token\" | sed -ne 's/\(.*\):\(..:..:..:..:..:..\).*/\2/p'\`
  289.  
  290.         if [ -z \"\$ssid_token\" ] ; then
  291.             ssid_token=\"\$token\"
  292.         fi
  293.  
  294.         wlan_scan_one \$1 \"\$ssid_token\" \"\$bssid_token\"
  295.         if [ \$? = 0 ] ; then
  296.             sleep 1
  297.             return 0
  298.         fi
  299.     done"
  300.     eval "$cmd"
  301.  
  302.     # We got to the end of the list.  Maybe try "any"
  303.     if is_true "$WLAN_ANY" ; then
  304.         wlan_scan_one $1
  305.         sleep 1
  306.         return $?
  307.     fi
  308.  
  309.     sleep 1
  310.     return 1
  311. }
  312.  
  313.  
  314. wlan_scan_one ()
  315. {
  316.     # $1 == wlandev, [ $2 == ssid, $3 == bssid, $4 == append ]
  317.  
  318.     if [ -z "$4" ] ; then
  319.     append=true
  320.     else
  321.     append=false
  322.     fi
  323.  
  324.     numbss=0
  325.  
  326.     result=`$WLANCTL $1 dot11req_scan bsstype=any bssid=ff:ff:ff:ff:ff:ff \
  327.         scantype=active probedelay=0 channellist=$ChannelList ssid="$2" \
  328.         minchanneltime=$ChannelMinTime maxchanneltime=$ChannelMaxTime append=$append`
  329.     eval $result
  330.     if [ $resultcode != 'success' ] ; then
  331.         ${ECHO} "Scan failed ($resultcode) "
  332.         return 1
  333.     fi
  334.  
  335.     ## XXX if numbss == 0, repeat with $2 $3 $4?
  336.  
  337.     i=0
  338.     bssfound=""
  339.  
  340.     # walk through the results and do first-cut matching.
  341.     while [ $i -lt $numbss ] ; do
  342.         result=`$WLANCTL $1 dot11req_scan_results bssindex=$i`
  343.         eval $result
  344.  
  345.         if [ -n "$3" ] ; then
  346.                         if [ "$3" = "$bssid" ] ; then
  347.                                bssfound="$bssfound $i"
  348.             fi
  349.         elif [ -z "$2" ] ; then
  350.             # if our ssid is "", then we pick the first entry.
  351.             bssfound="$bssfound $i"
  352.         elif [ "$2" = "$ssid" ] ; then
  353.             bssfound="$bssfound $i"
  354.         fi
  355.         i=`expr $i + 1`
  356.     done
  357.  
  358.     if [ -z "$bssfound" ]; then    # No BSSs found, bail.
  359.         return 1
  360.     else
  361.         # Now find the closest
  362.         bigsignal=0
  363.         for i in $bssfound ; do
  364.             result=`$WLANCTL $1 dot11req_scan_results bssindex=$i`
  365.             eval $result
  366.             if [ $bigsignal -lt $signal ]; then
  367.                 bigsignal=$signal
  368.                 bigbssindex=$i
  369.             fi
  370.         done
  371.         result=`$WLANCTL $1 dot11req_scan_results bssindex=$bigbssindex`
  372.         eval $result
  373.         return 0
  374.     fi
  375. }
  376.  
  377. wlan_wep ()
  378. {
  379.     # $1 == wlandev
  380.  
  381.     #=======WEP===========================================
  382.     # Setup privacy
  383.     if [ ${dot11PrivacyInvoked:-"false"} = "false" ] ; then
  384.         return 0;
  385.     fi
  386.  
  387.     result=`$WLANCTL $1 dot11req_mibget mibattribute=dot11PrivacyOptionImplemented`
  388.     if [ $? = 0 ] ; then
  389.         eval $result
  390.         eval $mibattribute
  391.     else
  392.         ${ECHO} "dot11PrivacyOptionImplemented mibget failed."
  393.         return 1
  394.     fi
  395.  
  396.     if [ $dot11PrivacyOptionImplemented = "false" ] ; then
  397.         ${ECHO} "Cannot enable privacy, dot11PrivacyOptionImplemented=false."
  398.         return 1
  399.     fi
  400.  
  401.     # Do we want host-based WEP?
  402.     result=`$WLANCTL $1 lnxreq_hostwep \
  403.         decrypt="${lnxreq_hostWEPDecrypt:-false}"    \
  404.         encrypt="${lnxreq_hostWEPEncrypt:-false}"`
  405.  
  406.     # set up the rest of the parametsrs.
  407.     if [ $dot11PrivacyOptionImplemented = "true" -a \
  408.          $dot11PrivacyInvoked = "true" ] ; then
  409.         result=`$WLANCTL $1 dot11req_mibset \
  410.               mibattribute=dot11WEPDefaultKeyID=$dot11WEPDefaultKeyID `
  411.         result=`$WLANCTL $1 dot11req_mibset \
  412.             mibattribute=dot11ExcludeUnencrypted=$dot11ExcludeUnencrypted `
  413.         result=`$WLANCTL $1 dot11req_mibset \
  414.             mibattribute=dot11PrivacyInvoked=$dot11PrivacyInvoked`
  415.         if [ "${PRIV_GENSTR:-empty}" != "empty" ] ; then
  416.             if [ ${PRIV_KEY128:-"false"} = "false" ]; then
  417.                 keys=`$PRIV_GENERATOR "$PRIV_GENSTR" 5`
  418.             else
  419.                 keys=`$PRIV_GENERATOR "$PRIV_GENSTR" 13`
  420.             fi
  421.                 knum=0
  422.             for i in $keys ; do
  423.                 result=`$WLANCTL $1 dot11req_mibset \
  424.                 mibattribute=dot11WEPDefaultKey$knum=$i`
  425.                 knum=`expr $knum + 1`
  426.             done
  427.         else 
  428.             result=`$WLANCTL $1 dot11req_mibset \
  429.             mibattribute=dot11WEPDefaultKey0=$dot11WEPDefaultKey0 `
  430.             result=`$WLANCTL $1 dot11req_mibset \
  431.             mibattribute=dot11WEPDefaultKey1=$dot11WEPDefaultKey1 `
  432.             result=`$WLANCTL $1 dot11req_mibset \
  433.             mibattribute=dot11WEPDefaultKey2=$dot11WEPDefaultKey2 `
  434.             result=`$WLANCTL $1 dot11req_mibset \
  435.             mibattribute=dot11WEPDefaultKey3=$dot11WEPDefaultKey3 `
  436.         fi
  437.     else
  438.         # disable wep explicitly.
  439.         result=`$WLANCTL $1 dot11req_mibset \
  440.             mibattribute=dot11PrivacyInvoked=$dot11PrivacyInvoked `
  441.         result=`$WLANCTL $1 dot11req_mibset \
  442.             mibattribute=dot11ExcludeUnencrypted=false `
  443.     fi
  444. }
  445.  
  446. wlan_adhoc ()
  447. {
  448.     # $1 == wlandev
  449.  
  450.     #=======IBSS STARTUP==================================
  451.     startcmd="$WLANCTL $1 dot11req_start "
  452.     startcmd="$startcmd ssid=$DesiredSSID"
  453.     startcmd="$startcmd bsstype=independent"
  454.     startcmd="$startcmd beaconperiod=$BCNINT" 
  455.     startcmd="$startcmd dtimperiod=3"
  456.     startcmd="$startcmd cfpollable=false"
  457.     startcmd="$startcmd cfpollreq=false"
  458.     startcmd="$startcmd cfpperiod=3"
  459.     startcmd="$startcmd cfpmaxduration=100"
  460.     startcmd="$startcmd probedelay=100"
  461.     startcmd="$startcmd dschannel=$CHANNEL"
  462.     j=1
  463.     for i in $BASICRATES ; do
  464.         startcmd="$startcmd basicrate$j=$i"
  465.         j=`expr $j + 1`
  466.         done
  467.  
  468.     j=1
  469.     for i in $OPRATES ; do
  470.         startcmd="$startcmd operationalrate$j=$i"
  471.         j=`expr $j + 1`
  472.     done
  473.  
  474.     results=`$startcmd`    # Here's where it runs
  475.     if [ $? = 0 ]; then 
  476.         eval $results
  477.         if [ $resultcode != "success" ] ; then 
  478.             ${ECHO} "IBSS not started, resultcode=$resultcode"
  479.             exit 1
  480.         else
  481.             ${ECHO} "IBSS mode started."
  482.         fi
  483.     else
  484.         ${ECHO} FAILED: $startcmd
  485.         return 1
  486.     fi
  487.     WLAN_SCHEMESSID="$DesiredSSID"
  488. }
  489.  
  490. wlan_infra ()
  491. {
  492.     # $1 == wlandev
  493.  
  494.     #==== INFRASTRUCURE STARTUP===========================
  495.     # XXX TODO:  Grok DesiredBSSID
  496.  
  497.     sleep 5
  498.     results=`$WLANCTL $1 lnxreq_autojoin \
  499.         "ssid=$DesiredSSID" \
  500.         authtype=${AuthType:="opensystem"} | sed 's/\([^=]*\)=\(.*\)/\1="\2"/'`
  501.     eval $results
  502.     if [ ${resultcode:-"failure"} != "success" ] ; then
  503.         ${ECHO} 'error: Autojoin indicated failure!'
  504.         return 1;
  505.     fi
  506.  
  507.     WLAN_SCHEMESSID="$DesiredSSID"
  508. }
  509.  
  510. wlan_dot11_join ()
  511. {
  512.     # $1 == wlandev
  513.  
  514.     joincmd="$WLANCTL $1 dot11req_join bssid=$DesiredBSSID"
  515.     joincmd="$joincmd joinfailuretimeout=1"
  516.     
  517.     j=1
  518.     for i in $OPRATES ; do
  519.         joincmd="$joincmd operationalrate$j=$i"
  520.         j=`expr $j + 1`
  521.     done
  522.  
  523.     results=`$joincmd`
  524.  
  525.     eval $results
  526.     if [ ${resultcode:-"failure"} != "success" ] ; then
  527.         ${ECHO} "$1: JOIN Failure"
  528.         ${ECHO} "joincmd=$joincmd"
  529.         ${ECHO} "results=$results"
  530.         return 1;
  531.     fi
  532. }
  533.  
  534. wlan_dot11_auth_assoc ()
  535. {
  536.     # $1 == wlandev
  537.     if [ $bsstype = "infrastructure" ] ; then 
  538.         results=`$WLANCTL $1 dot11req_authenticate \
  539.                 peerstaaddress=$DesiredBSSID \
  540.                 authenticationtype=$AuthType \
  541.                 authenticationfailuretimeout=2000`
  542.         eval $results
  543.         if [ ${resultcode:-"failure"} != "success" ] ; then
  544.             ${ECHO} "error:  dot11req_authenticate failed, "\
  545.                 "resultcode=$resultcode"
  546.             return 1;
  547.         fi
  548.         results=`$WLANCTL $1 dot11req_associate \
  549.                 listeninterval=1000 \
  550.                 associatefailuretimeout=2000 `
  551.         if [ ${resultcode:-"failure"} != "success" ] ; then
  552.             ${ECHO} 'error:  dot11req_associate failed!'
  553.             return 1;
  554.         fi
  555.     fi
  556. }
  557.  
  558. wlan_set_ssid_schemefile ()
  559. {
  560.     # $1 == SSID
  561.  
  562.     # Find the scheme file 
  563.     if [ -r /var/lib/misc/pcmcia-scheme ] ; then
  564.         # Debian
  565.         WLAN_SCHEMEFILE="/var/lib/misc/pcmcia-scheme"
  566.     elif [ -d /var/state/pcmcia ] ; then
  567.         WLAN_SCHEMEFILE="/var/state/pcmcia/scheme"
  568.     elif [ -d /var/lib/pcmcia ] ; then
  569.             WLAN_SCHEMEFILE="/var/lib/pcmcia/scheme"
  570.     else
  571.         WLAN_SCHEMEFILE="/var/run/pcmcia-scheme"
  572.     fi
  573.  
  574.     # Collect the current scheme name and save the file
  575.     if [ -r $WLAN_SCHEMEFILE ] ; then
  576.         WLAN_SCHEME=`cat $WLAN_SCHEMEFILE`
  577.         cp $WLAN_SCHEMEFILE /tmp/wlan_scheme_`date +"%T"`.tmp
  578.     else
  579.         touch /tmp/wlan_scheme_`date +"%T"`.tmp
  580.         
  581.     fi
  582.  
  583.     # Set up the <scheme:SSID> string
  584.     if [ ! "$WLAN_SCHEME" ] ; then 
  585.         WLAN_SCHEME="default"
  586.     fi
  587.     WLAN_SCHEME="$WLAN_SCHEME:$1"
  588.  
  589.     # Write to schemefile
  590.     echo $WLAN_SCHEME > $WLAN_SCHEMEFILE
  591. }
  592.  
  593. wlan_restore_schemefile ()
  594. {
  595.     # Find the scheme file 
  596.     if [ -r /var/lib/misc/pcmcia-scheme ] ; then
  597.         # Debian
  598.         WLAN_SCHEMEFILE="/var/lib/misc/pcmcia-scheme"
  599.     elif [ -d /var/state/pcmcia ] ; then
  600.         WLAN_SCHEMEFILE="/var/state/pcmcia/scheme"
  601.     elif [ -d /var/lib/pcmcia ] ; then
  602.             WLAN_SCHEMEFILE="/var/lib/pcmcia/scheme"
  603.     else
  604.         WLAN_SCHEMEFILE="/var/run/pcmcia-scheme"
  605.     fi
  606.  
  607.     TMPFILE=`ls /tmp/wlan_scheme*.tmp | tail -n 1`
  608.  
  609.     if [ -r $TMPFILE ] ; then
  610.         cat $TMPFILE > $WLAN_SCHEMEFILE
  611.         rm -f $TMPFILE
  612.     else
  613.         ${ECHO} "wlan_restore_schemefile: No wlan_scheme\*.tmp file found."
  614.     fi
  615. }
  616.  
  617. wlan_bring_it_up ()
  618. {
  619.     # $1 == wlandev
  620.     # $2 == non-null if wext enabled.
  621.  
  622.     #=======ENABLE========================================
  623.     # Do we want to init the card at all?
  624.     eval 'WLAN_ENABLE=$ENABLE_'$1
  625.  
  626.     if ! is_true $WLAN_ENABLE ; then
  627.     return 1
  628.     fi
  629.     
  630.     if wlan_enable $1 ; then
  631.     if [ -z "$2" ] ; then
  632.         wlan_scan_and_join $1
  633.         return $?
  634.     else
  635.         ${ECHO} "Bypassing configuration due to wireless extensions"
  636.     fi    
  637.     else
  638.     return 1;
  639.     fi
  640.  
  641.     return 1
  642. }
  643.  
  644. wlan_scan_and_join ()
  645. {
  646.     #=======MAC STARTUP=========================================
  647.     wlan_supports_scan $1
  648.     if [ $? = 0 ] ; then
  649.     wlan_scan $1 
  650.     if [ $? = 0 ] ; then
  651.         wlan_source_config_for_ssid "$ssid" "$bssid"
  652.         
  653.         wlan_user_mibs $1
  654.         wlan_wep $1
  655.         
  656.         wlan_join $1
  657.     else
  658.         if is_true $IS_ADHOC ; then     
  659.         # start an IBSS; we didn't find one.
  660.         wlan_adhoc $1
  661.         else
  662.         return 1
  663.         fi
  664.     fi
  665.     else
  666.     wlan_source_config $1
  667.     
  668.     wlan_user_mibs $1
  669.     wlan_wep $1
  670.     
  671.     if is_true $IS_ADHOC ; then     
  672.         wlan_adhoc $1
  673.     else
  674.         wlan_infra $1
  675.     fi
  676.     fi
  677.     
  678.     return $?
  679. }
  680.  
  681. wlan_join ()
  682. {
  683.     # $1 == wlandev
  684.     grep 'autojoin' /proc/net/p80211/$1/wlandev > /dev/null
  685.     if [ $? = 0 ]; then
  686.     wlan_infra $1
  687.     else
  688.     wlan_dot11_join $1
  689.     wlan_dot11_auth_assoc $1
  690.     fi
  691. }
  692.  
  693. start_wland ()
  694. {
  695.     $WLAND
  696. }
  697.  
  698. stop_wland ()
  699. {
  700.     killall wland
  701. }
  702.  
  703. tmpname ()
  704. {
  705.     # $1 == prefix
  706.     local i=0
  707.     local tname=$TMPDIR/${1}_$$
  708.     if [ -f ${tname}.tmp ] ; then
  709.         for i in 0 1 2 3 4 5 6 7 8 9 ; do
  710.             if [ ! -f ${tname}_${i}.tmp ] ; then
  711.                 echo ${tname}_${i}.tmp 
  712.                 return 0
  713.             fi
  714.         done
  715.     else
  716.         echo ${tname}.tmp
  717.     fi
  718.     return 0
  719. }
  720.  
  721. source_procfile ()
  722. {
  723.     # $1 == procfile to source
  724.     local fname=`tmpname wlan_procfile`
  725.     cat "$1" > $fname
  726.     . $fname
  727.     rm -f $fname
  728. }
  729.  
  730. # This is set by the Configure script as part of 'make install'
  731. #FIRMWARE_DIR="/usr/share/linux-wlan"
  732. FIRMWARE_DIR=/lib/firmware
  733.